/**
 * @description 手写bind
 * 需要挂在到Function.prototype上
 * 特点是返回一个函数，但不执行
 * 接收this，以及参数
 */
//@ts-ignore
Function.prototype.customBind = function(context: any, ...bindArgs:any[]){
    const self = this;

    return function (...args){
        const newArgs = bindArgs.concat(args);
        return self.apply(context, newArgs);
    }
}

function testFoo(a, b, c) {
    console.log(this, a, b, c);
}
// @ts-ignore
const aa = testFoo.customBind({x: 100}, 10, 20);
aa(30);